package com.negocio.entidades;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.validator.Min;

@Entity
@Table(name="CompCurr")
public class CompCurr implements Serializable{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	
	@ManyToOne
	@JoinColumn(nullable=false,referencedColumnName="id")
	private Usuario professor;
	
	@Column(nullable=false)
	private String nome;
	
	@Column(nullable=true)
	private String horario;
	
	@Column(nullable=true)
	private String local;
	
	@Column(nullable=true)
	private String dia;
	
	@Enumerated(EnumType.STRING)
	@Column(nullable=false)
	private TipoCompCurr tipoCompomente;
	
	@Enumerated(EnumType.STRING)
	@Column(nullable=false)
	private FormaParticipacao formaParticipacao;
	
	@Column(nullable=true)
	private double creditos;
	
	@Min(value=0)
	@Column(nullable=false)
	private int numVagas;
	
	@Column(nullable=true)
	private String descricao;
	
	@Column(nullable=true)
	private String referencias;
	
	@Column(nullable=true)
	private String ementa;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dtInicio;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dtFim;
	
	@Column(nullable=false)
	private boolean status;
	

	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public Usuario getProfessor() {
		return professor;
	}


	public void setProfessor(Usuario professor) {
		professor = professor;
	}


	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}


	public String getHorario() {
		return horario;
	}


	public void setHorario(String horario) {
		this.horario = horario;
	}


	public String getLocal() {
		return local;
	}


	public void setLocal(String local) {
		this.local = local;
	}


	public String getDia() {
		return dia;
	}


	public void setDia(String dia) {
		this.dia = dia;
	}


	public TipoCompCurr getTipoCompomente() {
		return tipoCompomente;
	}


	public void setTipoCompomente(TipoCompCurr tipoCompomente) {
		this.tipoCompomente = tipoCompomente;
	}


	public FormaParticipacao getFormaParticipacao() {
		return formaParticipacao;
	}


	public void setFormaParticipacao(FormaParticipacao formaParticipacao) {
		this.formaParticipacao = formaParticipacao;
	}


	public double getCreditos() {
		return creditos;
	}


	public void setCreditos(double creditos) {
		this.creditos = creditos;
	}


	public int getNumVagas() {
		return numVagas;
	}


	public void setNumVagas(int numVagas) {
		this.numVagas = numVagas;
	}


	public String getDescricao() {
		return descricao;
	}


	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}


	public String getReferencias() {
		return referencias;
	}


	public void setReferencias(String referencias) {
		this.referencias = referencias;
	}


	public String getEmenta() {
		return ementa;
	}


	public void setEmenta(String ementa) {
		this.ementa = ementa;
	}


	public Date getDtInicio() {
		return dtInicio;
	}


	public void setDtInicio(Date dtInicio) {
		this.dtInicio = dtInicio;
	}


	public Date getDtFim() {
		return dtFim;
	}


	public void setDtFim(Date dtFim) {
		this.dtFim = dtFim;
	}


	public boolean isStatus() {
		return status;
	}


	public void setStatus(boolean status) {
		this.status = status;
	}


	@Override
	public boolean equals(Object cc){
		if(cc instanceof CompCurr){
			final CompCurr ccOutro = (CompCurr) cc;
			return (ccOutro.getNome().equals(this.nome) && ccOutro.getDtInicio().equals(this.dtInicio) && ccOutro.getProfessor().getId() == this.professor.getId());
		}
		return true;
	}
	
	
	@Override
	public int hashCode(){
		return this.hashCode();
	}
}
